"""
手动数据库修复脚本
用于修复sessions表缺少category列的问题
"""

import sqlite3
import os
import sys

def manual_fix():
    print("=== 手动数据库修复脚本 ===")
    
    # 确定项目根目录
    project_root = os.path.dirname(os.path.abspath(__file__))
    print(f"项目根目录: {project_root}")
    
    # 数据库文件路径
    db_path = os.path.join(project_root, 'database.db')
    print(f"数据库文件路径: {db_path}")
    
    # 检查数据库文件是否存在
    if os.path.exists(db_path):
        print("✓ 数据库文件存在")
    else:
        print("✗ 数据库文件不存在，将创建新的数据库文件")
        try:
            open(db_path, 'w').close()
            print("✓ 成功创建数据库文件")
        except Exception as e:
            print(f"✗ 创建数据库文件失败: {e}")
            return False
    
    try:
        # 连接到数据库
        print("连接到数据库...")
        conn = sqlite3.connect(db_path)
        cursor = conn.cursor()
        
        # 检查sessions表是否存在
        print("检查sessions表是否存在...")
        cursor.execute("SELECT name FROM sqlite_master WHERE type='table' AND name='sessions'")
        table_exists = cursor.fetchone()
        
        if not table_exists:
            print("✗ sessions表不存在，创建新表...")
            create_sql = """
            CREATE TABLE sessions (
                id VARCHAR(36) PRIMARY KEY,
                name VARCHAR(100) NOT NULL DEFAULT '默认会话',
                user_id VARCHAR(36),
                status VARCHAR(20) NOT NULL DEFAULT 'active',
                category VARCHAR(20) NOT NULL DEFAULT 'default',
                interaction_count INTEGER NOT NULL DEFAULT 0,
                research_count INTEGER NOT NULL DEFAULT 0,
                session_metadata TEXT,
                created_at TIMESTAMP NOT NULL,
                updated_at TIMESTAMP NOT NULL,
                closed_at TIMESTAMP,
                search_vector VARCHAR(1000)
            )
            """
            cursor.execute(create_sql)
            print("✓ 成功创建sessions表")
        else:
            print("✓ sessions表存在，检查category列...")
            # 检查category列是否存在
            cursor.execute("PRAGMA table_info(sessions)")
            columns = cursor.fetchall()
            column_names = [col[1] for col in columns]
            
            print(f"当前列: {column_names}")
            
            if 'category' in column_names:
                print("✓ category列已存在，无需修复")
            else:
                print("✗ 缺少category列，正在添加...")
                try:
                    cursor.execute("ALTER TABLE sessions ADD COLUMN category VARCHAR(20) DEFAULT 'default'")
                    print("✓ 成功添加category列")
                except Exception as e:
                    print(f"✗ 添加category列失败: {e}")
                    # 如果添加失败，可能是其他问题，尝试重新创建表
                    print("尝试重新创建表...")
                    # 这是一个更复杂的操作，需要备份数据等，这里只是提示
                    
        # 提交并关闭连接
        conn.commit()
        conn.close()
        print("✓ 数据库修复完成")
        return True
        
    except Exception as e:
        print(f"✗ 修复过程中出现错误: {e}")
        return False

if __name__ == "__main__":
    print("开始执行数据库修复...")
    success = manual_fix()
    if success:
        print("\n🎉 数据库修复成功完成！")
        print("现在可以重新运行应用程序了。")
    else:
        print("\n❌ 数据库修复失败！")
        print("请检查错误信息并手动处理。")